React์ experimental_useRefresh API์ ๋ชฉ์ , ๊ตฌํ, ํ๊ณ๋ฅผ ์ดํดํ๊ณ Fast Refresh๋ฅผ ํตํด ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ด๋ป๊ฒ ํฅ์์ํค๋์ง ํ๊ตฌํฉ๋๋ค.
React์ experimental_useRefresh ์ฌ์ธต ๋ถ์: ์ปดํฌ๋ํธ ์๋ก๊ณ ์นจ ์ข ํฉ ๊ฐ์ด๋
์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ์ ์ํ ์ ๋์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ React๋ ๊ฐ๋ฐ์ ๊ฒฝํ๊ณผ ์ ํ๋ฆฌ์ผ์ด์
์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์ง์์ ์ผ๋ก ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ๊ทธ์ค ํ๋๊ฐ Fast Refresh๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ experimental_useRefresh API์
๋๋ค. ์ด ๊ฐ์ด๋์์๋ experimental_useRefresh์ ๋ชฉ์ , ์ฌ์ฉ๋ฒ, ํ๊ณ, ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๋ ํจ์จ์ ์ด๊ณ ์์ฐ์ ์ธ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ๊ธฐ์ฌํ๋์ง์ ๋ํด ํฌ๊ด์ ์ผ๋ก ํ๊ตฌํฉ๋๋ค.
Fast Refresh๋ ๋ฌด์์ธ๊ฐ?
experimental_useRefresh์ ์ธ๋ถ ์ฌํญ์ ์ดํด๋ณด๊ธฐ ์ ์ Fast Refresh์ ๊ฐ๋
์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Fast Refresh๋ React ์ปดํฌ๋ํธ๋ฅผ ํธ์งํ๊ณ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ์์ง ์์ผ๋ฉด์ ๋ธ๋ผ์ฐ์ ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ๊ฑฐ์ ์ฆ์ ๋ฐ์๋๋ ๊ฒ์ ๋ณผ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์
๋๋ค. ์ด๋ ๊ฐ๋ฐ ์ค ํผ๋๋ฐฑ ๋ฃจํ๋ฅผ ํฌ๊ฒ ์ค์ฌ ๋ ๋น ๋ฅธ ๋ฐ๋ณต๊ณผ ์ฆ๊ฑฐ์ด ์ฝ๋ฉ ๊ฒฝํ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ ํต์ ์ผ๋ก ์ฝ๋ ์์ ์ ์ข ์ข ์ ์ฒด ํ์ด์ง ์๋ก๊ณ ์นจ์ผ๋ก ์ด์ด์ ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ์ด๊ธฐํํ๊ณ , ๊ฐ๋ฐ์๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๊ธฐ ์ํด ๊ด๋ จ ์น์ ์ผ๋ก ๋ค์ ์ด๋ํด์ผ ํ์ต๋๋ค. Fast Refresh๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์์ ๋ ์ปดํฌ๋ํธ๋ง ์ง๋ฅ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๊ณ ์ํ๋ฅผ ๋ณด์กดํจ์ผ๋ก์จ ์ด๋ฌํ ๋ง์ฐฐ์ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์กฐํฉ์ ํตํด ๋ฌ์ฑ๋ฉ๋๋ค:
- ์ฝ๋ ๋ถํ : ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์๊ณ ๋ ๋ฆฝ์ ์ธ ๋ชจ๋๋ก ๋๋๋ ๊ฒ.
- ํซ ๋ชจ๋ ๊ต์ฒด(HMR): ์ ์ฒด ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด ๋ฐํ์์ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋์ ์ ๋ฐ์ดํธํ๋ ๋ฉ์ปค๋์ฆ.
- React Refresh: React ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ํ ๋ณด์กด์ ๋ณด์ฅํ๊ธฐ ์ํด ํน๋ณํ ์ค๊ณ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
experimental_useRefresh ์๊ฐ
experimental_useRefresh๋ React Refresh๋ฅผ ์ปดํฌ๋ํธ์ ํตํฉํ๋ ๊ฒ์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ๋์
๋ React ํ
์
๋๋ค. ์ด๋ React์ ์คํ์ API์ ์ผ๋ถ์ด๋ฉฐ, ํฅํ ๋ฆด๋ฆฌ์ค์์ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ ๊ฑฐ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ํ์ง๋ง ํ๋ก์ ํธ์์ Fast Refresh๋ฅผ ํ์ฑํํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ ์ฉํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
experimental_useRefresh์ ์ฃผ์ ๋ชฉ์ ์ ์ปดํฌ๋ํธ๋ฅผ React Refresh ๋ฐํ์์ ๋ฑ๋กํ๋ ๊ฒ์
๋๋ค. ์ด ๋ฑ๋ก์ ํตํด ๋ฐํ์์ ์ปดํฌ๋ํธ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๊ณ ํ์ํ ๋ ์
๋ฐ์ดํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค. ์ธ๋ถ ์ฌํญ์ React Refresh ๋ด๋ถ์์ ์ฒ๋ฆฌ๋์ง๋ง, ๊ทธ ์ญํ ์ ์ดํดํ๋ ๊ฒ์ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ๋ฌธ์ ํด๊ฒฐํ๊ณ ์ต์ ํํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
์ ์คํ์ ์ธ๊ฐ?
"์คํ์ "์ด๋ผ๋ ๋ ์ด๋ธ์ด ๋ถ์ ๊ฒ์ ํด๋น API๊ฐ ์์ง ๊ฐ๋ฐ ์ค์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์์ ๋ํ๋
๋๋ค. React ํ์ ์ด ์ง์ ์ ์ฌ์ฉํ์ฌ ์ปค๋ฎค๋ํฐ๋ก๋ถํฐ ํผ๋๋ฐฑ์ ์์งํ๊ณ , ์ค์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ธฐ๋ฐ์ผ๋ก API๋ฅผ ๊ฐ์ ํ๋ฉฐ, ์์ ํํ๊ธฐ ์ ์ ์ ์ฌ์ ์ผ๋ก ํธํ์ฑ์ด ๊นจ์ง๋ ๋ณ๊ฒฝ์ ํ ์ ์์ต๋๋ค. ์คํ์ API๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ์กฐ๊ธฐ ์ ๊ทผ์ ์ ๊ณตํ์ง๋ง, ๋ถ์์ ์ฑ๊ณผ ์ ์ฌ์ ํ์ง์ ์ํ๋ ๋ฐ๋ฆ
๋๋ค. ๋ฐ๋ผ์ experimental_useRefresh์ ์คํ์ ์ฑ๊ฒฉ์ ์ธ์งํ๊ณ ํ๋ก๋์
ํ๊ฒฝ์์ ํฌ๊ฒ ์์กดํ๊ธฐ ์ ์ ๊ทธ ์ํฅ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
experimental_useRefresh ์ฌ์ฉ ๋ฐฉ๋ฒ
๋๋ถ๋ถ์ ์ต์ React ์ค์ ์์๋ experimental_useRefresh๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์ ํ์ ์ผ ์ ์์ง๋ง(๋ฒ๋ค๋ฌ์ ํ๋ ์์ํฌ๊ฐ ์ข
์ข
ํตํฉ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์), ๊ทธ ๊ธฐ๋ณธ ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ์ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ด์ ์๋ ์ด ํ
์ ์ปดํฌ๋ํธ์ ์๋์ผ๋ก ์ฝ์
ํด์ผ ํ์ต๋๋ค. ์ด์ ๋ ์ข
์ข
ํด๋ง์ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค.
์์ (์ค๋ช ์ฉ - ์ง์ ํ์ํ์ง ์์ ์ ์์)
๋ค์ ์์๋ experimental_useRefresh์ *๊ฐ์์ ์ธ* ์ฌ์ฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ฐธ๊ณ : Create React App, Next.js ๋๋ ์ ์ฌํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ์ต์ React ํ๋ก์ ํธ์์๋ ์ผ๋ฐ์ ์ผ๋ก ์ด ํ
์ ์๋์ผ๋ก ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค. ๋ฒ๋ค๋ฌ์ ํ๋ ์์ํฌ๊ฐ React Refresh ํตํฉ์ ์ฒ๋ฆฌํฉ๋๋ค.
```javascript import { experimental_useRefresh } from 'react'; function MyComponent() { if (import.meta.hot) { experimental_useRefresh(MyComponent, import.meta.hot.id); } return (
Hello from MyComponent!
์ค๋ช :
- ๊ฐ์ ธ์ค๊ธฐ:
reactํจํค์ง์์experimental_useRefreshํ ์ ๊ฐ์ ธ์ต๋๋ค. - ์กฐ๊ฑด๋ถ ํ์ธ:
import.meta.hot์กฐ๊ฑด์ HMR(Hot Module Replacement)์ด ํ์ฑํ๋์๋์ง ํ์ธํฉ๋๋ค. ์ด๋ HMR์ ์ฌ์ฉํ๋ ๊ฐ๋ฐ ์ค์๋ง ์๋ก๊ณ ์นจ ๋ก์ง์ด ์คํ๋๋๋ก ๋ณด์ฅํ๋ ํ์ค์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. - ๋ฑ๋ก:
experimental_useRefreshํ ์ ๋ ๊ฐ์ ์ธ์์ ํจ๊ป ํธ์ถ๋ฉ๋๋ค:- ์ปดํฌ๋ํธ ํจ์(
MyComponent). - ๋ชจ๋์ ๊ณ ์ ID(
import.meta.hot.id). ์ด ID๋ React Refresh๊ฐ ์ปดํฌ๋ํธ๋ฅผ ์๋ณํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
- ์ปดํฌ๋ํธ ํจ์(
์ค์ ๊ณ ๋ ค์ฌํญ:
- ๋ฒ๋ค๋ฌ ์ค์ :
experimental_useRefresh๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด ๋ฒ๋ค๋ฌ(์: webpack, Parcel, Rollup)๋ฅผ HMR(Hot Module Replacement) ๋ฐ React Refresh๋ฅผ ํ์ฑํํ๋๋ก ์ค์ ํด์ผ ํฉ๋๋ค. Create React App, Next.js, Gatsby์ ๊ฐ์ ์ธ๊ธฐ ์๋ ํ๋ ์์ํฌ์๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ํ ์ฌ์ ์ค์ ๋ ์ง์์ด ํฌํจ๋์ด ์์ต๋๋ค. - ์๋ฌ ๋ฐ์ด๋๋ฆฌ: Fast Refresh๋ ๊ฐ๋ฐ ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ์๋ฌ ๋ฐ์ด๋๋ฆฌ์ ์์กดํฉ๋๋ค. ์๋ฌ๋ฅผ ์ ์ ํ ํฌ์ฐฉํ๊ณ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ฌ๋ฐ๋ฅธ ์๋ฌ ๋ฐ์ด๋๋ฆฌ๊ฐ ์ค์ ๋์ด ์๋์ง ํ์ธํ์ธ์.
- ์ํ ๋ณด์กด: Fast Refresh๋ ๊ฐ๋ฅํ ํ ์ปดํฌ๋ํธ ์ํ๋ฅผ ๋ณด์กดํ๋ ค๊ณ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ปดํฌ๋ํธ์ ์๊ทธ๋์ฒ ๋ณ๊ฒฝ(์: props ์ถ๊ฐ ๋๋ ์ ๊ฑฐ)๊ณผ ๊ฐ์ ํน์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฒด ์ฌ๋ ๋๋ง๊ณผ ์ํ ์์ค์ ์ด๋ํ ์ ์์ต๋๋ค.
Fast Refresh์ experimental_useRefresh ์ฌ์ฉ์ ์ด์
Fast Refresh์ experimental_useRefresh์ ์กฐํฉ์ React ๊ฐ๋ฐ์์๊ฒ ์ฌ๋ฌ ๊ฐ์ง ์ค์ํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ: ์ ์ฒด ํ์ด์ง ์๋ก๊ณ ์นจ ์๋ ์ฆ๊ฐ์ ์ธ ์ ๋ฐ์ดํธ๋ ํผ๋๋ฐฑ ๋ฃจํ๋ฅผ ๊ทน์ ์ผ๋ก ์ค์ฌ ๊ฐ๋ฐ์๊ฐ ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๋ฐ๋ณต ์์ ์ ์ํํ ์ ์๊ฒ ํฉ๋๋ค.
- ๊ฐ์ ๋ ๊ฐ๋ฐ์ ๊ฒฝํ: ์ ๋ฐ์ดํธ ์ค ์ปดํฌ๋ํธ ์ํ๋ฅผ ๋ณด์กดํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์คํธ๊ฐ ์ ์ง๋์ด ๋ ์ํํ๊ณ ๋ฐฉํด๋ฐ์ง ์๋ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- ์์ฐ์ฑ ํฅ์: ๋ ๋น ๋ฅธ ๋ฐ๋ณต๊ณผ ๋ถ๋๋ฌ์ด ์ํฌํ๋ก์ฐ๋ ๊ฐ๋ฐ์ ์์ฐ์ฑ ํฅ์์ผ๋ก ์ด์ด์ง๋๋ค.
- ์ธ์ง ๋ถํ ๊ฐ์: ๊ฐ๋ฐ์๋ ๊ฐ ๋ณ๊ฒฝ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ จ ์น์ ์ผ๋ก ๊ณ์ํด์ ๋์๊ฐ ํ์ ์์ด ์ฝ๋ ์์ฑ์ ์ง์คํ ์ ์์ต๋๋ค.
ํ๊ณ ๋ฐ ์ ์ฌ์ ๋ฌธ์ ์
Fast Refresh๋ ๊ฐ์น ์๋ ๋๊ตฌ์ด์ง๋ง, ๊ทธ ํ๊ณ์ ์ ์ฌ์ ์ธ ๋ฌธ์ ์ ์ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ์คํ์ API:
experimental_useRefresh๋ React์ ์คํ์ API์ ์ผ๋ถ์ด๋ฏ๋ก ํฅํ ๋ฆด๋ฆฌ์ค์์ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ ๊ฑฐ๋ ์ ์์ต๋๋ค. ํ์์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์กฐ์ ํ ์ค๋น๋ฅผ ํด์ผ ํฉ๋๋ค. - ์ํ ์์ค: ํน์ ์ฝ๋ ์์ ์ ์ฌ์ ํ ์ํ ์์ค์ ์ ๋ฐํ์ฌ ์ ์ฒด ์ฌ๋ ๋๋ง์ ํ์๋ก ํ ์ ์์ต๋๋ค. ์ด๋ ์ปดํฌ๋ํธ์ ์๊ทธ๋์ฒ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋, ํ ์ ์์๋ฅผ ์์ ํ๊ฑฐ๋, ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ๋์ ํ ๋ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํธํ์ฑ ๋ฌธ์ : Fast Refresh๋ ๋ชจ๋ React ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์๋ํํฐ ๋๊ตฌ์ ํธํ๋์ง ์์ ์ ์์ต๋๋ค. ์์กด์ฑ ํจํค์ง์ ๋ฌธ์๋ฅผ ํ์ธํ์ฌ ํธํ์ฑ์ ํ์ธํ์ธ์.
- ์ค์ ๋ณต์ก์ฑ: Fast Refresh ์ค์ ์ ๋๋๋ก ๋ณต์กํ ์ ์์ผ๋ฉฐ, ํนํ ์ฌ์ฉ์ ์ง์ ๋ฒ๋ค๋ฌ ์ค์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ์ง์นจ์ ๋ฒ๋ค๋ฌ ๋ฐ ํ๋ ์์ํฌ์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์์์น ๋ชปํ ๋์: ๊ฒฝ์ฐ์ ๋ฐ๋ผ Fast Refresh๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฐ์ดํธํ์ง ์๊ฑฐ๋ ๋ฌดํ ๋ฃจํ๋ฅผ ์ ๋ฐํ๋ ๋ฑ ์์์น ๋ชปํ ๋์์ ๋ณด์ผ ์ ์์ต๋๋ค. ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๋ค์ ์์ํ๊ฑฐ๋ ๋ธ๋ผ์ฐ์ ์บ์๋ฅผ ์ง์ฐ๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ๋ฌธ์ ํด๊ฒฐ
Fast Refresh์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ํด๊ฒฐ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅผ ์ ์์ต๋๋ค:
- ๋ฒ๋ค๋ฌ ์ค์ ํ์ธ: ๋ฒ๋ค๋ฌ๊ฐ HMR ๋ฐ React Refresh์ ๋ํด ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ๋ค์ ํ์ธํ์ธ์. ํ์ํ ํ๋ฌ๊ทธ์ธ๊ณผ ๋ก๋๊ฐ ์ค์น๋์๋์ง ํ์ธํฉ๋๋ค.
- ๊ตฌ๋ฌธ ์ค๋ฅ ํ์ธ: ๊ตฌ๋ฌธ ์ค๋ฅ๋ Fast Refresh๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ๊ฒ์ ๋ฐฉํดํ ์ ์์ต๋๋ค. ์ฝ๋์ ์คํ๋ ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ์๋์ง ์ฃผ์ ๊น๊ฒ ๊ฒํ ํ์ธ์.
- ์์กด์ฑ ์ ๋ฐ์ดํธ: ์ต์ ๋ฒ์ ์ React, React Refresh ๋ฐ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ์ธ์. ์ค๋๋ ์์กด์ฑ์ ๋๋๋ก ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ ์๋ฒ ์ฌ์์: ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์ฌ์์ํ๋ฉด Fast Refresh์ ์ผ์์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ์บ์ ์ง์ฐ๊ธฐ: ๋ธ๋ผ์ฐ์ ์บ์๋ฅผ ์ง์ฐ๋ฉด ์ต์ ๋ฒ์ ์ ์ฝ๋๋ฅผ ๋ณด๊ณ ์๋์ง ํ์ธํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ์ฝ์ ๋ก๊ทธ ๊ฒ์ฌ: ๋ธ๋ผ์ฐ์ ์ฝ์์ ์ค๋ฅ ๋ฉ์์ง๋ ๊ฒฝ๊ณ ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ธ์. ์ด๋ฌํ ๋ฉ์์ง๋ ๋ฌธ์ ์ ์์ธ์ ๋ํ ๊ท์คํ ๋จ์๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ๋ฌธ์ ์ฐธ์กฐ: ๋ฌธ์ ํด๊ฒฐ ํ๊ณผ ํด๊ฒฐ์ฑ ์ ์ฐพ์ผ๋ ค๋ฉด React Refresh, ๋ฒ๋ค๋ฌ ๋ฐ ํ๋ ์์ํฌ์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
experimental_useRefresh์ ๋์
experimental_useRefresh๊ฐ Fast Refresh๋ฅผ ํ์ฑํํ๋ ์ฃผ์ ๋ฉ์ปค๋์ฆ์ด์ง๋ง, ๊ทธ ์ฌ์ฉ์ ์ข
์ข
๋ ๋์ ์์ค์ ๋๊ตฌ์ ์ํด ์ถ์ํ๋ฉ๋๋ค. ๋ค์์ ์ฌ๋ฌ๋ถ์ด ์ ํ ์ ์๋ ๋ช ๊ฐ์ง ๋์ ๋ฐ ๊ด๋ จ ๊ธฐ์ ์
๋๋ค:
- Create React App (CRA): CRA๋ Fast Refresh์ ๋ํ ๋ด์ฅ ์ง์์ ํฌํจํ์ฌ React ๊ฐ๋ฐ์ ์ํ ์ ๋ก ์ค์ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. CRA๋ฅผ ์ฌ์ฉํ ๋
experimental_useRefresh๋ฅผ ์๋์ผ๋ก ์ค์ ํ ํ์๊ฐ ์์ต๋๋ค. - Next.js: Next.js๋ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง, ์ ์ ์ฌ์ดํธ ์์ฑ ๋ฐ ๊ธฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ธ๊ธฐ ์๋ React ํ๋ ์์ํฌ์ ๋๋ค. ๋ํ Fast Refresh์ ๋ํ ๋ด์ฅ ์ง์์ ํฌํจํ์ฌ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ๋จ์ํํฉ๋๋ค.
- Gatsby: Gatsby๋ React๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ์ ๋๋ค. ๋ํ Fast Refresh์ ๋ํ ๋ด์ฅ ์ง์์ ์ ๊ณตํ์ฌ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- Webpack Hot Module Replacement (HMR): HMR์ ๋ฐํ์์ ๋ธ๋ผ์ฐ์ ์์ ๋ชจ๋์ ์ ๋ฐ์ดํธํ๋ ์ผ๋ฐ์ ์ธ ๋ฉ์ปค๋์ฆ์ ๋๋ค. React Refresh๋ HMR์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์ด ์ํ ๋ณด์กด๊ณผ ๊ฐ์ React ๊ด๋ จ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- Parcel: Parcel์ React ํ๋ก์ ํธ์ ๋ํด HMR ๋ฐ Fast Refresh๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ์ ๋ก ์ค์ ๋ฒ๋ค๋ฌ์ ๋๋ค.
Fast Refresh ์ด์ ์ ๊ทน๋ํํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
Fast Refresh๋ฅผ ์ต๋ํ ํ์ฉํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ธ์:
- ํจ์ํ ์ปดํฌ๋ํธ์ ํ ์ฌ์ฉ: ํจ์ํ ์ปดํฌ๋ํธ์ ํ ์ ์ผ๋ฐ์ ์ผ๋ก ํด๋์ค ์ปดํฌ๋ํธ๋ณด๋ค Fast Refresh์ ๋ ํธํ๋ฉ๋๋ค.
- ์ปดํฌ๋ํธ ๋ณธ๋ฌธ์์ ๋ถ์ ํจ๊ณผ(Side Effects) ํผํ๊ธฐ: ์ปดํฌ๋ํธ ๋ณธ๋ฌธ์์ ์ง์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, DOM ์กฐ์๊ณผ ๊ฐ์ ๋ถ์ ํจ๊ณผ๋ฅผ ์ํํ์ง ๋ง์ธ์.
useEffect๋ ๋ค๋ฅธ ํ ์ ์ฌ์ฉํ์ฌ ๋ถ์ ํจ๊ณผ๋ฅผ ๊ด๋ฆฌํ์ธ์. - ์ปดํฌ๋ํธ๋ฅผ ์๊ณ ์ง์ค์ ์ผ๋ก ์ ์งํ๊ธฐ: ๋ ์๊ณ ์ง์ค์ ์ธ ์ปดํฌ๋ํธ๋ ์ ๋ฐ์ดํธํ๊ธฐ ์ฝ๊ณ Fast Refresh ์ค์ ์ํ ์์ค์ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ์ ์ต๋๋ค.
- ์๋ฌ ๋ฐ์ด๋๋ฆฌ ์ฌ์ฉ: ์๋ฌ ๋ฐ์ด๋๋ฆฌ๋ ๊ฐ๋ฐ ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ๋ ์ฐ์ํ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
- ์ ๊ธฐ์ ์ผ๋ก ํ ์คํธํ๊ธฐ: Fast Refresh๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๊ณ ์์์น ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ธฐ์ ์ผ๋ก ํ ์คํธํ์ธ์.
์ค์ ์ฌ๋ก ๋ฐ ์ฌ์ฉ ์์
์ ์์๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๊ฐ๋ฐ์๋ฅผ ์๊ฐํด ๋ด ์๋ค. Fast Refresh๊ฐ ์๋ค๋ฉด, ์ํ ๋ชฉ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ณ๊ฒฝํ ๋๋ง๋ค(์: ๊ฐ๊ฒฉ ์กฐ์ , ์ค๋ช ์ ๋ฐ์ดํธ) ์ ์ฒด ํ์ด์ง ์๋ก๊ณ ์นจ์ ๊ธฐ๋ค๋ฆฐ ํ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๊ธฐ ์ํด ์ํ ๋ชฉ๋ก์ผ๋ก ๋ค์ ์ด๋ํด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ๋ฒ๊ฑฐ๋ก์ธ ์ ์์ต๋๋ค. With Fast Refresh, the developer can see the changes almost instantly, without losing the application's state or navigating away from the product listing. This allows them to iterate more quickly, experiment with different designs, and ultimately deliver a better user experience. Another example involves a developer working on a complex data visualization. Without Fast Refresh, making changes to the visualization code (e.g., adjusting the color scheme, adding new data points) would require a full reload and resetting the visualization's state. This can make it difficult to debug and fine-tune the visualization. With Fast Refresh, the developer can see the changes in real-time, without losing the visualization's state. This allows them to quickly iterate on the visualization design and ensure that it accurately represents the data.
์ด๋ฌํ ์์๋ ์ค์ ๊ฐ๋ฐ ์๋๋ฆฌ์ค์์ Fast Refresh์ ์ค์ง์ ์ธ ์ด์ ์ ๋ณด์ฌ์ค๋๋ค. ๋ ๋น ๋ฅธ ๋ฐ๋ณต์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ์ปดํฌ๋ํธ ์ํ๋ฅผ ๋ณด์กดํ๋ฉฐ, ๊ฐ๋ฐ์ ๊ฒฝํ์ ๊ฐ์ ํจ์ผ๋ก์จ Fast Refresh๋ React ๊ฐ๋ฐ์์ ์์ฐ์ฑ๊ณผ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
React์ ์ปดํฌ๋ํธ ์๋ก๊ณ ์นจ์ ๋ฏธ๋
React์์ ์ปดํฌ๋ํธ ์๋ก๊ณ ์นจ ๋ฉ์ปค๋์ฆ์ ์งํ๋ ๊ณ์ ์งํ ์ค์ธ ๊ณผ์ ์
๋๋ค. React ํ์ ๊ฐ๋ฐ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ณ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ์ต์ ํํ๊ธฐ ์ํ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ง์์ ์ผ๋ก ํ์ํ๊ณ ์์ต๋๋ค.
experimental_useRefresh๋ ๊ฐ์น ์๋ ๋๊ตฌ์ด์ง๋ง, ํฅํ ๋ฒ์ ์ React์์๋ ์ปดํฌ๋ํธ ์๋ก๊ณ ์นจ์ ๋ํด ํจ์ฌ ๋ ์ ๊ตํ๊ณ ๊ฐ์ํ๋ ์ ๊ทผ ๋ฐฉ์์ด ๋์
๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ด๋ฌํ ๋ฐ์ ์๋ ๋ค์์ด ํฌํจ๋ ์ ์์ต๋๋ค:
- ํฅ์๋ ์ํ ๋ณด์กด: ๋ณต์กํ ์ฝ๋ ๋ณ๊ฒฝ ์์๋ ์ปดํฌ๋ํธ ์ํ๋ฅผ ๋ณด์กดํ๊ธฐ ์ํ ๋ ๊ฐ๋ ฅํ ๊ธฐ์ .
- ์๋ ์ค์ : ์ค์ ๊ณผ์ ์ ๋์ฑ ๋จ์ํํ์ฌ ๋ชจ๋ React ํ๋ก์ ํธ์์ Fast Refresh๋ฅผ ๋ ์ฝ๊ฒ ํ์ฑํํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ํจ.
- ๊ฐํ๋ ์๋ฌ ์ฒ๋ฆฌ: ๊ฐ๋ฐ ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ ์ง๋ฅ์ ์ธ ์๋ฌ ๊ฐ์ง ๋ฐ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ.
- ์๋ก์ด React ๊ธฐ๋ฅ๊ณผ์ ํตํฉ: ์๋ฒ ์ปดํฌ๋ํธ ๋ฐ Suspense์ ๊ฐ์ ์๋ก์ด React ๊ธฐ๋ฅ๊ณผ์ ์ํํ ํตํฉ์ ํตํด Fast Refresh๊ฐ ์ต์ React ํ์ ๊ณผ ํธํ๋๋๋ก ๋ณด์ฅ.
๊ฒฐ๋ก
React์ Fast Refresh์ ํต์ฌ ๋๋ ฅ์ธ experimental_useRefresh๋ ์ฝ๋ ๋ณ๊ฒฝ์ ๋ํ ๊ฑฐ์ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํจ์ผ๋ก์จ ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฅ์์ํค๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ต์ ํด๋ง์ ์ํด ์ง์ ์ ์ธ ์ฌ์ฉ์ด ์ถ์ํ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง, ๊ทธ ๊ธฐ๋ณธ ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋ฌธ์ ํด๊ฒฐ ๋ฐ Fast Refresh์ ์ด์ ์ ๊ทน๋ํํ๋ ๋ฐ ํ์์ ์
๋๋ค.
Fast Refresh๋ฅผ ์์ฉํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด React ๊ฐ๋ฐ์๋ ์์ฐ์ฑ์ ํฌ๊ฒ ํฅ์์ํค๊ณ , ๋ ๋น ๋ฅด๊ฒ ๋ฐ๋ณตํ๋ฉฐ, ๋ ๋์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค. React๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ ์๋ก๊ณ ์นจ ๋ฉ์ปค๋์ฆ์์ ๋ ๋ง์ ๋ฐ์ ์ ๊ธฐ๋ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ๋์ฑ ๊ฐ์ํํ๊ณ ๊ฐ๋ฐ์๊ฐ ๋๋ผ์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋๋ก ํ์ ์ค์ด์ค ๊ฒ์ ๋๋ค.